import base64
import json
import os

import pymysql


def bs64(data):
    """
    进行base64加密处理,
    :param data: 传入需要加密的数据, 可以是中文,字典,列表,bool
    :return:
    """
    data = json.dumps(data, ensure_ascii=False)
    encode64 = base64.b64encode(data.encode('utf-8'))
    return encode64.decode('utf-8')


def decode64_str(data):
    """
    base64解密
    :param data: 需要解密的字符串bytes-like object or ASCII string s
    :return:
    """
    decode64 = base64.b64decode(data)
    decode64_str = decode64.decode('utf-8')
    return decode64_str


class ContMysql:

    def __init__(self):
        self.conn = pymysql.connect(
            user='reader',
            password='reader@mysql',
            host='47.102.214.108',
            database='micor_service_user_platform',
            port=3306,
            charset="utf8",
            autocommit=True)
        # 通过 cursor() 创建游标对象，并让查询结果以字典格式输出
        self.cur = self.conn.cursor()

    def __del__(self):  # 对象资源被释放时触发，在对象即将被删除时的最后操作
        # 关闭游标
        self.cur.close()
        # 关闭数据库连接
        self.conn.close()


    def select_db(self, sql):
        """查询"""
        # 检查连接是否断开，如果断开就进行重连
        self.conn.ping(reconnect=True)
        # 使用 execute() 执行sql
        self.cur.execute(sql)
        # 使用 fetchall() 获取查询结果
        data = self.cur.fetchall()
        return data

    def execute_db(self, sql):
        """更新/新增/删除"""
        try:
            # 检查连接是否断开，如果断开就进行重连
            self.conn.ping(reconnect=True)
            # 使用 execute() 执行sql
            self.cur.execute(sql)
            # 提交事务
            self.conn.commit()
        except Exception as e:
            print("操作MySQL出现错误，错误原因：{}".format(e))
            # 回滚所有更改
            self.conn.rollback()


class ContMysql1:

    def __init__(self):
        self.conn = pymysql.connect(
            user='reader',
            password='reader@mysql',
            host='47.102.214.108',
            database='platform_retone_fit',
            port=3306,
            charset="utf8",
            autocommit=True)
        # 通过 cursor() 创建游标对象，并让查询结果以字典格式输出
        self.cur = self.conn.cursor()

    def __del__(self):  # 对象资源被释放时触发，在对象即将被删除时的最后操作
        # 关闭游标
        self.cur.close()
        # 关闭数据库连接
        self.conn.close()


    def select_db(self, sql):
        """查询"""
        # 检查连接是否断开，如果断开就进行重连
        self.conn.ping(reconnect=True)
        # 使用 execute() 执行sql
        self.cur.execute(sql)
        # 使用 fetchall() 获取查询结果
        data = self.cur.fetchall()
        return data

    def execute_db(self, sql):
        """更新/新增/删除"""
        try:
            # 检查连接是否断开，如果断开就进行重连
            self.conn.ping(reconnect=True)
            # 使用 execute() 执行sql
            self.cur.execute(sql)
            # 提交事务
            self.conn.commit()
        except Exception as e:
            print("操作MySQL出现错误，错误原因：{}".format(e))
            # 回滚所有更改
            self.conn.rollback()


if __name__ == '__main__':
    # s = True
    # # bs_s = bs64(s)
    # de_s = decode64_str()
    # mysql = ContMysql()
    # a = mysql.select_db('select account from micor_service_api-user_platformapp_user a1,app_user_usable_platform_info a2 where a1.id=a2.id and a2.retone_fit_platform_state=1')
    # print(a[:2])

    mysql1 = ContMysql1()
    bind_devices_id = mysql1.select_db('select device_number from app_user_device_binding order by device_number ASC')
    # print(list(bind_devices_id[:10]))
    if os.path.exists('account/binduser.txt'):
        os.remove('account/binduser.txt')
    for username in bind_devices_id:
        if username[0].startswith('tester'):
            with open('account/binduser.txt', mode='a', encoding='utf-8') as f:
                f.write(username[0])
                f.write('\n')

